﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BO;
using System.IO;
using System.Net;

namespace Site_CamaraTibau
{
    public partial class frmNoticias : PaginaBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Page.Form.Attributes.Add("enctype", "multipart/form-data");

                if (!Page.IsPostBack)
                {
                    VereadorBO.Listar(ddlVereador);
                    CategoriaBO.Listar(ddlCategoria);
                    mtv.SetActiveView(viewListagem);
                }
            }
            catch (Exception)
            {

                throw;
            }
        }


        #region Contexto
        ModeloContainer bco = new ModeloContainer();
        #endregion

        #region Funções
        public void pesquisar()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {

                var objs = (from a in bco.Noticias select a).ToList();

                if (objs != null)
                {
                    if (!string.IsNullOrEmpty(txtPesquisarID.Text.Trim()))
                    {
                        int id = int.Parse(txtPesquisarID.Text.Trim());

                        objs = objs.Where(a => a.id == id).ToList();
                    }

                    if (!string.IsNullOrEmpty(txtPesquisarTitulo.Text.Trim()))
                    {
                        string texto = txtPesquisarTitulo.Text.Trim().ToLower();

                        objs = objs.Where(a => a.titulo.ToLower().Contains(texto)).ToList();
                    }
                }


                var objs2 = (from a in objs
                             orderby a.dtPublicacao ascending
                             select new
                             {
                                 ID = a.id,
                                 dtPublicacao = a.dtPublicacao,
                                 Titulo = a.titulo
                             }).ToList();

                gvListagem.DataSource = objs2;
                gvListagem.DataBind();


                if (objs2.Count == 1)
                    lblNumeroLinhas.Text = "Foi encontrado " + objs2.Count + " registro.";
                else if (objs2.Count > 1)
                    lblNumeroLinhas.Text = "Foram encontrados " + objs2.Count + " registros.";
                else
                    lblNumeroLinhas.Text = "";

                mtv.SetActiveView(viewListagem);
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }

        }
        public void salvar()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                Noticia obj = new Noticia();

                if (!string.IsNullOrEmpty(lblID.Text))
                    obj.id = int.Parse(lblID.Text);


                if (ddlCategoria.SelectedIndex > 0)
                {
                    obj.categoriaID = int.Parse(ddlCategoria.SelectedValue.ToString());

                    obj.usuarioID = UsuarioLogado.id;
                    obj.titulo = txtTitulo.Text.Trim();
                    obj.texto = CKEditor1.Text;
                    obj.dtPublicacao = DateTime.Now;
                    obj.resumo = txtResumo.Text.Trim();

                    NoticiaBO.Salvar(obj);

                    lblID.Text = obj.id.ToString();

                    lblSucesso.Text = "Registro salvo com sucesso!";
                }
                else
                    throw new Exception("Selecione uma categoria!");
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        public void excluir(int id)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                NoticiaBO.Excluir(id);

                pesquisar();

                lblSucesso.Text = "Registro Excluído com Sucesso!";
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }

        public void limpar()
        {
            ddlCategoria.SelectedIndex = 0;

            txtTitulo.Text = string.Empty;
            CKEditor1.Text = string.Empty;
            txtPesquisarTitulo.Text = string.Empty;
            txtFotoDescricao.Text = string.Empty;
            txtResumo.Text = string.Empty;

            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;
            lblID.Text = string.Empty;
        }

        public void carregaForm(int id)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                Noticia obj = NoticiaBO.Selecionar(id);

                if (obj != null)
                {
                    lblID.Text = obj.id.ToString();


                    if (obj.categoriaID != null)
                        ddlCategoria.SelectedValue = obj.categoriaID.ToString();

                    txtTitulo.Text = obj.titulo;
                    txtResumo.Text = obj.resumo;

                    CKEditor1.Text = obj.texto;

                    atualizaListagemVereadores();
                    atualizaListagemFotos();

                    mtv.SetActiveView(viewFormulario);
                }
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }

        public void atualizaListagemVereadores()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                if (!string.IsNullOrEmpty(lblID.Text))
                {
                    int id = int.Parse(lblID.Text);

                    var objs = (from a in bco.NoticiaVereadors where a.noticiaID == id select a).ToList();



                    var objs2 = (from a in objs
                                 orderby a.Vereador.nome ascending
                                 select new
                                 {
                                     ID = a.id,
                                     Nome = a.Vereador.nome + " (" + a.Vereador.Partido.sigla + ")"
                                 }).ToList();

                    gvVereadores.DataSource = objs2;
                    gvVereadores.DataBind();

                    mtv.SetActiveView(viewFormulario);
                }
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }

        }
        public void addVereador()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                NoticiaVereador obj = new NoticiaVereador();

                if (string.IsNullOrEmpty(lblID.Text))
                    salvar();

                obj.noticiaID = int.Parse(lblID.Text);
                obj.vereadorID = int.Parse(ddlVereador.SelectedValue.ToString());

                NoticiaVereadorBO.Salvar(obj);

                atualizaListagemVereadores();

                lblSucesso.Text = "Registro salvo com sucesso!";

                mtv.SetActiveView(viewFormulario);
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        public void excluirVereadorVinculado(int id)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                NoticiaVereadorBO.Excluir(id);

                atualizaListagemVereadores();

                lblSucesso.Text = "Registro Excluído com Sucesso!";
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }


        public void atualizaListagemFotos()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                if (!string.IsNullOrEmpty(lblID.Text))
                {
                    int id = int.Parse(lblID.Text);

                    var objs = (from a in bco.Fotoes where a.noticiaID == id select a).ToList();

                    var objs2 = (from a in objs
                                 orderby a.id ascending
                                 select new
                                 {
                                     ID = a.id,
                                     URL = "~/fotos/noticia/" + a.noticiaID + "/" + a.urlFoto,
                                     eCapa = a.eCapa,
                                     ids = a.noticiaID + "-" + a.id
                                 }).ToList();

                    rptFotos.DataSource = objs2;
                    rptFotos.DataBind();

                    mtv.SetActiveView(viewFormulario);
                }
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }

        }

        public static System.Drawing.Bitmap Resize(System.Drawing.Bitmap value, int newWidth)
        {
            int newwidthimg = 0;

            float width = (float)value.Size.Width;
            float height = (float)value.Size.Height;

            //if (width >= height)
            //    newwidthimg = 600;
            //else
            //    newwidthimg = 450;

            float AspectRatio = (float)value.Size.Width / (float)value.Size.Height;

            int newHeight = Convert.ToInt32(newwidthimg / AspectRatio); 

    
            System.Drawing.Bitmap resizedImage = new System.Drawing.Bitmap(newwidthimg, newHeight);
            System.Drawing.Graphics.FromImage((System.Drawing.Image)resizedImage).DrawImage(value, 0, 0, newwidthimg, newHeight);
            return (resizedImage);
        }

        public void addFoto()
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                Foto obj = new Foto();

                if (string.IsNullOrEmpty(lblID.Text))
                    salvar();

                obj.noticiaID = int.Parse(lblID.Text);
                obj.eCapa = false;
                obj.descricao = txtFotoDescricao.Text.Trim();

                if (FileUpload1.HasFile)
                {
                    obj.urlFoto = FileUpload1.FileName;
                    string pastaRaiz = HttpContext.Current.Server.MapPath("\\fotos\\noticia\\" + obj.noticiaID);
                    if(!Directory.Exists(pastaRaiz))
                    Directory.CreateDirectory(pastaRaiz);
                    string caminhoDoArquivo = pastaRaiz + "\\" + FileUpload1.FileName;

                    if (File.Exists(caminhoDoArquivo))
                        throw new Exception("Já Existe um Arquivo com este nome para esta notícia!");

                    FileUpload1.SaveAs(caminhoDoArquivo);
                }

                FotoBO.Salvar(obj);

                atualizaListagemFotos();

                lblSucesso.Text = "Registro salvo com sucesso!";

                mtv.SetActiveView(viewFormulario);
            }
            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        public void excluirFoto(int id)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            try
            {
                FotoBO.Excluir(id);

                atualizaListagemFotos();

                lblSucesso.Text = "Registro Excluído com Sucesso!";
            }

            catch (Exception ex)
            {
                lblErro.Text = ex.Message.ToString();
            }
        }
        #endregion

        #region Eventos do formulario

        #region Grids

        protected void gvListagem_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            if (e.CommandName.Contains("cmdEditar"))
            {
                int id = Convert.ToInt32(e.CommandArgument);
                carregaForm(id);
            }
            else if (e.CommandName.Contains("cmdExcluir"))
            {
                int id = Convert.ToInt32(e.CommandArgument);
                excluir(id);
            }
        }



        protected void OnCheckedChanged_Click(object sender, EventArgs e)
        {
            lblSucesso.Text = "";
            lblErro.Text = "";
            try
            {
                RadioButton rdBtn = (RadioButton)sender;

                int noticiaID = int.Parse(rdBtn.ToolTip.Split('-')[0]);
                int fotoID = int.Parse(rdBtn.ToolTip.Split('-')[1]);

                var tdsFotos = (from a in bco.Fotoes where a.noticiaID == noticiaID select a);

                // Muda para eCapa = false para todas as fotos da noticia carrega
                foreach (var foto in tdsFotos)
                {
                    foto.eCapa = false;
                    FotoBO.Salvar(foto);
                }

                // Muda para eCapa = true na foto selecionada
                Foto FotoDaVez = tdsFotos.FirstOrDefault(x => x.id == fotoID);

                FotoDaVez.eCapa = true;
                FotoBO.Salvar(FotoDaVez);

                atualizaListagemFotos();

                lblSucesso.Text = "Registro salvo com sucesso!";
            }
            catch (Exception)
            {
                throw;
            }
        }

        protected void gvListagem_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvListagem.PageIndex = e.NewPageIndex;
            pesquisar();
        }

        protected void gvListagem_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // when mouse is over the row, save original color to new attribute, and change it to highlight yellow color
                e.Row.Attributes.Add("onmouseover", "this.originalstyle=this.style.backgroundColor;this.style.backgroundColor='#BDD9F6'");
                // when mouse leaves the row, change the bg color to its original value   
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=this.originalstyle;");
            }
        }


        protected void gvVereadores_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            if (e.CommandName.Contains("cmdExcluir"))
            {
                int id = Convert.ToInt32(e.CommandArgument);
                excluirVereadorVinculado(id);
            }
        }


        protected void gvVereadores_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvVereadores.PageIndex = e.NewPageIndex;
        }

        protected void gvVereadores_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // when mouse is over the row, save original color to new attribute, and change it to highlight yellow color
                e.Row.Attributes.Add("onmouseover", "this.originalstyle=this.style.backgroundColor;this.style.backgroundColor='#BDD9F6'");
                // when mouse leaves the row, change the bg color to its original value   
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=this.originalstyle;");
            }
        }


        protected void rptFotos_ItemCommand(Object Sender, RepeaterCommandEventArgs e)
        {
            //(Button)e.CommandSource).Text 
            lblErro.Text = string.Empty;
            lblSucesso.Text = string.Empty;

            if (e.CommandName.Contains("cmdExcluir"))
            {
                int id = Convert.ToInt32(e.CommandArgument);
                excluirFoto(id);
            }
        }

        #endregion

        #region Botões
        protected void btnPesquisar_Click(object sender, EventArgs e)
        {
            pesquisar();
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            limpar();
            mtv.SetActiveView(viewFormulario);
        }

        protected void btnADDVereador_Click(object sender, EventArgs e)
        {
            addVereador();
        }

        protected void btnADDFoto_Click(object sender, EventArgs e)
        {
            addFoto();
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            pesquisar();
            mtv.SetActiveView(viewListagem);
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            salvar();
        }

        protected void btnLimpar_Click(object sender, EventArgs e)
        {
            limpar();
        }

        #endregion


        protected void viewListagem_Activate(object sender, EventArgs e)
        {
            lblHeader.Text = "Pesquisar";
        }

        protected void viewFormulario_Activate(object sender, EventArgs e)
        {
            lblHeader.Text = "Salvar";
        }


        #endregion
    }
}